<?php
Prado::using('Application.models.cliente');
Prado::using('Application.models.articulo');
Prado::using('Application.models.vendedor');
Prado::using('Application.models.cab_documento');
Prado::using('Application.models.det_documento');
Prado::using('System.Web.UI.ActiveControls.*');

class NewPedido extends TPage
{
    private $_data_tipodoc = null;
    private $CodigoPedido = null;    
    private $_dataDetalle=null;
    private $_data = null;

    private function sqlmap_Vendedores()
    {
        return $this->Application->getModule('SQLMap_VENDEDORES')->getClient();
    }		    
    private function sqlmap_DetPedido()
    {
        return $this->Application->getModule('SQLMap_DET_DOCUMENTOS')->getClient();
    }		    
    private function sqlmap_CabPedido()
    {
        return $this->Application->getModule('SQLMap_CAB_DOCUMENTOS')->getClient();
    }
    private function sqlmap_Cliente()
    {
        return $this->Application->getModule('SQLMap_CLIENTES')->getClient();
    }
    
    private function sqlmap_Articulo()
    {
        return $this->Application->getModule('SQLMap_ARTICULOS')->getClient();
    }
       
    protected function getData()
    {
        if($this->_data===null)
            $this->loadData();
        return $this->_data;
    }
    
    protected function loadData()
    {
        if(($this->_data=$this->getViewState('Data',null))===null)
        {
          $this->Limpiar_Ingreso();
          
          $sqlmapVendedor = $this->sqlmap_Vendedores();
          $this->Vendedores->DataTextField='nom_vendedor';
          $this->Vendedores->DataValueField='cod_vendedor';
          $this->Vendedores->DataSource = $sqlmapVendedor->queryForList('SelectVendedores');
          $this->Vendedores->dataBind();

          $this->CodigoPedido =  (int)rtrim(ltrim($_GET['CODIGO_PEDIDO'])); 
          if ($this->CodigoPedido === -1)
            {
              $this->Limpiar_Pedido();                                                   
            }
          else
            { 
              $this->lbTituloGrid->Text = 'Modificar datos del Pedido';                                         
              $edit_pedido =  $this->sqlmap_CabPedido()->queryForObject('SelectCab_Documento',$this->CodigoPedido);
              $this->DataGrid->DataSource = $this->sqlmap_DetPedido()->queryForList('SelectDet_Documentos',$this->CodigoPedido);
               
              $this->TxtNum_Pedido->Text          = $edit_pedido->num_documento;
              $this->TxtCodSerie->Text            = $edit_pedido->cod_serie;
              $this->TxtNumSerie->Text            = $edit_pedido->num_serie;                            
              $this->TxtFechaPedido->Text         = $edit_pedido->fecha_documento;
              $this->Vendedores->SelectedValue    = $edit_pedido->cod_vendedor;
              $this->TxtCodCtaCte->Text           = $edit_pedido->cod_cliente;
              $this->TxtNomCtaCte->Text           = $edit_pedido->nom_cliente;
              $this->TxtDireccion->Text           = $edit_pedido->dir_cliente;              
              $this->TxtUsuario->Text             = $edit_pedido->cod_usuario;              
            }
          $this->_dataDetalle = $this->DataGrid->DataSource;
          $this->_data        = $this->DataGrid->DataSource;              
          $this->setViewState('Data',$this->_data);
          $this->DataGrid->dataBind();                  
         }
      //$this->saveData();
    }    
    
    protected function saveData()
    {
        $this->setViewState('Data',$this->_data);
    }    

    private function Limpiar_Ingreso()
    {
      $this->TxtCantidad->Text      = '1.00';
      $this->TxtPrecio->Text        = '0.00';
      $this->TxtDescuento->Text     = '0.00';
      $this->TxtCod_Articulo->Text  = '';
      $this->TxtNom_Articulo->Text  = '';
      return 0;
    }

    public function onLoad($param)
    {
        parent::onLoad($param);
        if(!$this->IsPostBack)
        {
          $this->loaddata();
          //si debes revisar el original, revisar el NewPedido de Lia Cautiva.
        }                                                        
    }
      
    public function Limpiar_Pedido()
    {
      $this->TxtNum_Pedido->Text  = $this->CodigoPedido;
      $this->DataGrid->DataSource = null; 
      $this->TxtUsuario->Text     = $_SESSION["ID_USUARIO"];
      $this->TxtFechaPedido->Text = date("Y/m/d");                                                   
    }
  
    public function Grabar_Pedido($sender, $param)    
    {
        if ($this->DataGrid->ItemCount === 0)        
        {
          $this->Validador->Text = 'Debe ingresar por lo menos un articulo para poder grabar, por favor verificar...';
        }
        else
          {
            $this->CodigoPedido =  (int)rtrim(ltrim($_GET['CODIGO_PEDIDO']));       
            $cabecera = new cab_documento();
            $cabecera->num_documento    = $this->TxtNum_Pedido->Text;
            $cabecera->fecha_documento  = $this->TxtFechaPedido->Text;
            $cabecera->cod_vendedor     = $this->Vendedores->SelectedValue;
            $cabecera->cod_cliente      = $this->TxtCodCtaCte->Text;
            $cabecera->nom_cliente      = $this->TxtNomCtaCte->Text;
            $cabecera->dir_cliente      = $this->TxtDireccion->Text;              
            $cabecera->cod_usuario      = $this->TxtUsuario->Text;
            $cabecera->cod_serie        = $this->TxtCodSerie->Text;
            $cabecera->num_serie        = $this->TxtNumSerie->Text;            
          
            if ($this->CodigoPedido === -1)
              {
                $max = $this->sqlmap_CabPedido()->queryForObject('SelectMaxCab_Documento');
                $cabecera->num_documento = $max;
                //$this->Validador->Text = ' ajsdkajsdkj ' . $max;
                $this->sqlmap_CabPedido()->insert("InsertCab_Documento", $cabecera);
              }
            else
              {
                $this->sqlmap_CabPedido()->update("UpdateCab_Documento", $cabecera);            
              }
            $this->sqlmap_CabPedido()->delete("DeleteDet_Documento", $cabecera);
            $max = $this->DataGrid->ItemCount;
            $contador = 0;
            $detalle = new det_documento();
            
            while ($contador < $max)
              {
                $detalle->num_documento = $cabecera->num_documento;
                $detalle->item          = $contador + 1;
                $detalle->cod_articulo  = $this->DataGrid->Items[$contador]->COD_ARTICULOCOLUMN->Text;
                $detalle->cantidad      = (float)$this->DataGrid->Items[$contador]->CANTIDADCOLUMN->Text;
                $detalle->precio        = (float)$this->DataGrid->Items[$contador]->PRECIOCOLUMN->Text;
                $detalle->descuento     = (float)$this->DataGrid->Items[$contador]->DESCUENTOCOLUMN->Text;                        
                $this->sqlmap_DetPedido()->insert("InsertDet_Documento", $detalle);
                $contador = $contador + 1;
              }
            $this->Validador->Text = 'Se ha guardado el pedido';
          }                                         
    }
    
    public function Agregar_Detalle($sender, $data)
    {
      $this->Validador->Text = '';    
      if ($this->DataGrid->ItemCount <> 0)
        {
          $data = $this->Data;
        } 
           
      if ($this->TxtNom_Articulo->Text === "")
        {
          $this->Validador->Text = 'No ha ingresa un articulo valido, por favor verificar...';
        }
      else
      {
        if (floatval($this->TxtPrecio->Text) < floatval($this->TxtMaxDscto->Text))
          {
            $this->Validador->Text = 'El articulo tiene un precio de venta debajo del aceptado, por favor verificar...';
          }
        else
          {  
            $indice = $this->DataGrid->ItemCount;                              
            $data[$indice] =     array( 'item'          =>$indice                     ,
                                        'cod_articulo'  =>$this->TxtCod_Articulo->Text,
                                        'nom_articulo'  =>$this->TxtNom_Articulo->Text,
                                        'cantidad'      =>$this->TxtCantidad->Text    ,
                                        'descuento'     =>$this->TxtDescuento->Text   ,
                                        'precio'        =>$this->TxtPrecio->Text      ,
                                        'subtotal'      =>((float)$this->TxtPrecio->Text * (float)$this->TxtCantidad->Text) - ((float)$this->TxtPrecio->Text * (float)$this->TxtCantidad->Text) * (((float)$this->TxtDescuento->Text)/100) 
                                      );
            $this->_data = $data;              
            $this->DataGrid->DataSource = $data;
            $this->setViewState('Data',$this->_data);
            $this->DataGrid->databind();
            $this->Limpiar_Ingreso();
          }
      }      
    }

    public function itemCreated($sender,$param)
    {
        $item=$param->Item;
        if($item->ItemType==='EditItem')
        {
        }
        if($item->ItemType==='Item' || $item->ItemType==='AlternatingItem' || $item->ItemType==='EditItem')
        {
            // add an aleart dialog to delete buttons
            $item->DeleteColumn->Button->Attributes->onclick='if(!confirm(\'Esta Ud. Seguro de borrar este elemento ?\')) return false;';
        }
    }

    public function editItem($sender,$param)
    {        
    }
 
    public function saveItem($sender,$param)
    {       
    }
 
    public function cancelItem($sender,$param)
    {
    }
 
    public function deleteItem($sender,$param)
    {
    }
    
    public function changePage($sender,$param)
    {
    }
 
    public function pagerCreated($sender,$param)
    {
        $param->Pager->Controls->insertAt(0,'Pagina: ');    
    }
 
    public function Buscar_Articulo($sender,$param)
    {
      $this->Validador->Text = '';            
      $articulo   = $this->sqlmap_Articulo()->queryForObject('SelectArticulo',$this->TxtCod_Articulo->Text); 
      if ($articulo===null)
      {
        $this->TxtNom_Articulo->Text  = '';      
        $this->Validador->Text = 'El articulo '.$this->TxtCod_Articulo->Text.' no se ha encontrado, por favor verificar...';
        return false;
      }
      else
      {     
        $this->TxtNom_Articulo->Text          = $articulo->nom_articulo;
        $this->TxtPrecioArticulo->Text        = $articulo->precio_venta;
        $this->TxtMaxDscto->Text              = $articulo->precio_venta - ($articulo->precio_venta * ($articulo->max_dscto_venta /100));
        return true;
      }              

    }

    public function Buscar_Cliente($sender,$param)
    {
      $this->Validador->Text = '';            
      $Cliente   = $this->sqlmap_Cliente()->queryForObject('SelectCliente',(int)$this->TxtCodCtaCte->Text); 
      if ($Cliente===null)
      {
        $this->Validador->Text = 'El cliente numero '.$this->TxtCodCtaCte->Text.' no se ha encontrado, por favor verificar...';
        $this->TxtNomCtaCte->Text = ''; 
        return false;       
      }
      else
      {     
        $this->TxtNomCtaCte->Text = $Cliente->nom_cliente;
        $this->TxtDireccion->Text = $Cliente->dir_cliente;
        return true;        
      }                    
    }

    public function Validar_Serie($sender,$param)
    {
      $this->Validador->Text = "";    
      $cod_serie = (int)$this->TxtCodSerie->Text;
      $num_serie = (int)$this->TxtNumSerie->Text;
      
      $arreglo = array();
      $arreglo["cod_serie"] = $cod_serie; 
      $arreglo["num_serie"] = $num_serie;             
      
      $pedido   = $this->sqlmap_CabPedido()->queryForObject('SelectCab_Documento_Serie',$arreglo); 
      if ($pedido <> null)
      {
        $this->Validador->Text = 'El numero de serie '.$this->TxtCodSerie->Text.' '.$this->TxtNumSerie->Text.' ya existe, por favor verificar...'; 
        return false;       
      }
      else
      {     
        return true;        
      }                    
    }
    
    public function suggestNames($sender,$param) 
    {
        $token=$param->getToken();
        $criterio = '%'.$token.'%';

        $datos = $this->sqlmap_Articulo()->queryForList('BuscarArticulo', $criterio);
        $i=0;
        $arti = new articulo();
        $arre = array();
        while ($i < count($datos)) 
        {
          $arti = $datos[$i];
          $arre[]= array('id' => $arti->cod_articulo, 'name' => $arti->nom_articulo);          
          $i++;
        }                             
        $sender->DataSource= $arre;                
        $sender->dataBind();                                                                                                     
    } 

    public function SuggestionSelected($sender,$param) 
    { 
        $this->TxtCod_Articulo->Text = $sender->Suggestions->DataKeys[$param->selectedIndex];
        $this->Buscar_Articulo($sender, $param);        
    }
    
    
           
}

?>